今天我們來探討目前生成式 AI 最主流的應用: RAG(Retrieval-Augmented Generation,檢索增強生成)。
大型語言模型(LLM)如 GPT-5 在通用知識上表現出色,但它們的知識庫有限且可能過時(只包含訓練數據前的資訊)。當我們問模型一些包含最新資訊或特定領域知識的問題時,僅靠模型自己知識往往是不夠的。此外,直接把公司內部全部的文件丟到 prompt 也不現實,即便現在模型的上下文長度可以高達 100 萬 tokens,也常常會不夠用。再者,現在模型是 by tokens 來收費的,因此成本也會變得更高。
RAG 的核心是:在生成答案之前,先從外部資料檢索出相關內容,提供給模型參考,讓模型增強回答的準確性。
典型的 RAG 系統包含兩個主要模組:檢索器 (Retriever) 和 生成器 (Generator)。整體流程如下:
首先,對資料庫中的文本(如文件、知識庫)進行處理。每段文本被轉換為向量表示(Embedding)並存入向量資料庫中。向量能夠表示語意,所以即使問句與文檔用不同詞彙表達,只要語意相近,向量距離也會接近。Embedding 的模型愈好,在檢索語意相近時的效果會愈好哦!
當用戶提出問題後,我們先將用戶問題也轉換為向量,然後在前述向量索引中進行相似度搜索,找出與問題語意最相關的幾段文本。這一步等同於從資料庫中檢索潛在有用的資訊。相比關鍵字搜索,向量搜尋更能匹配語意相關內容。例如問「董事長是誰」,可以找到包含「執行長」字樣的句子。
將檢索到的相關文本片段取回,與原始問題一起組合成一個提示 (Prompt)。通常會加上一些說明例如「參考以下資料回答問題」之類,然後列出檢索到的內容,最後再寫上使用者的實際問題。這樣模型在生成時就能看到這些參考資料。
將組裝好的 Prompt 提交給 LLM。模型根據問題和提供的參考資料,產生答案文本並返回給用戶。由於模型可以利用參考資料中的細節,回答往往更加準確具體,而且能包含最新資訊。也因此,模型愈聰明的話,參考資料來生成答案的效果愈好。
假設我們有一份公司內部手冊存於向量資料庫。現在問:「我們公司的特休政策是什麼?」
RAG 會將問題Embedding後在手冊向量索引中找出相關段落(比如手冊中的「休假制度」章節)。然後把該章節內容連同問題一起餵給 GPT 模型。模型閱讀後,生成回答:「根據公司手冊,第十條規定,員工每年有 7 天特休,需提前申請且經公司同意才行。」這就是一個 RAG 策略的結果。模型原本可能不知道你們公司的特休政策,但因為我們檢索並提供了手冊內容,所以它能正確回答。
(雖然特休要經公司同意才能放假,是違反勞基法的 🤣🤣)
接下來我們將親手實作一個 RAG 流程:建立 Embedding 模型、利用 Azure AI Search 儲存向量,LangChain 和 Azure OpenAI 來快速搭建一個 RAG。